﻿using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioBairro
    {
        private IRepositorioBairro _repositorioBairro;

        /// <summary>
        /// 
        /// </summary>
        public NegocioBairro()
        {
            _repositorioBairro = new RepositorioBairro();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="bairro"></param>
        /// <returns></returns>
        public Bairro Inserir(Bairro bairro)
        {
            bairro.Codigo = GeradorCodigo.GerarCodigo(1);
            bairro.Codigo += (_repositorioBairro.ObterUltimoIdCodigoInteiro() + 1).ToString();
            bairro.Codigo += GeradorCodigo.GerarCodigo(1, bairro.Codigo);
            return _repositorioBairro.Inserir(bairro);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="bairro"></param>
        /// <returns></returns>
        public Bairro Atualizar(Bairro bairro)
        {
            return _repositorioBairro.Atualizar(bairro);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="bairro"></param>
        public void Excluir(Bairro bairro)
        {
            Bairro bairroTmp = ObterPorId(bairro.BairroId);
            _repositorioBairro.Excluir(bairroTmp);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Bairro> ObterTodos()
        {
            return _repositorioBairro.ObterTodos();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Bairro ObterPorId(int id)
        {
            return _repositorioBairro.ObterPorId(id);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="descricao"></param>
        /// <returns></returns>
        public IList<Bairro> ObterPorDescricao(string descricao)
        {
            return _repositorioBairro.ObterPorDescricao(descricao);
        }

        /// <summary>
        /// Obtem Todos os Bairros Da Cidade
        /// </summary>
        ///  <param name="usuarioPermissao"></param>
        /// <param name="cidade"></param>
        /// <returns></returns>
        public IList<Bairro> ObterTodosBairrosPorCidade(Usuario usuarioPermissao, Cidade cidade)
        {
            return _repositorioBairro.ObterTodosBairrosPorCidade(cidade);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public Bairro ObterPorCodigo(string codigo)
        {
            return _repositorioBairro.ObterPorCodigo(codigo);
        }

        public IList<Bairro> ObterPorCodigoeCidade(Usuario usuarioPermissao, string codigo, Cidade cidade)
        {
            return _repositorioBairro.ObterPorCodigoeCidade(codigo, cidade);
        }
    } 
}